package com.chaos.eurekaproducer.leetCode;

/**
 * @author liaopeng
 * @title: Offer12
 * @projectName eureka-producer
 * @description:
 *请实现一个函数，输入一个整数（以二进制串形式），输出该数二进制表示中 1 的个数。例如，把 9 表示成二进制是 1001，
 * 有 2 位是 1。因此，如果输入 9，则该函数输出 2。
 *
 *  
 * 示例 1：
 *
 * 输入：00000000000000000000000000001011
 * 输出：3
 * 解释：输入的二进制串 00000000000000000000000000001011 中，共有三位为 '1'。
 * 示例 2：
 *
 * 输入：00000000000000000000000010000000
 * 输出：1
 * 解释：输入的二进制串 00000000000000000000000010000000 中，共有一位为 '1'。
 * 示例 3：
 *
 * 输入：11111111111111111111111111111101
 * 输出：31
 * 解释：输入的二进制串 11111111111111111111111111111101 中，共有 31 位为 '1'。
 *
 *
 * 思路：
 * >>>=1：表示无符号位有移1位
 * n&1=0：与运算表示n的二进制末位是0;
 * n&1=1：与运算表示n的二进制末位是1;
 * @date 2021/6/9下午2:24
 */
public class Offer15 {
    public static int hammingWeight(int n){
        int res =0;
        while (n!=0){
            int m = n & 1;
            res+=m;
            n>>>=1;
        }
        return res;
    }

    public static void main(String[] args) {
        int i = hammingWeight(9 );
        System.out.println(i);
    }
}
